package datastructure.HashMap;

import java.util.HashMap;

/**
 * @Author Gan
 * @Date 2021/5/10 18:53
 * @Description: 给定一个字符串数组 words 和一个字符串 chars.
 * 如果一个字符串能被 chars 里面的字符组成，
 * 那么这个字符串就是"好"的(chars里面每个字符只能使用一次)。
 * 求：words 里面所有好的字符串的字符总个数。
 * 比如：
 * words = ["cat", "bt", "hat", "tree"]
 * chars = "atach"
 * 好的字符串有 "cat", "hat", 3 + 3 = 6.
 * 输出：6
 */
public class HashMapWork2 {
    public static void main(String[] args) {
        String[] words = {"cat", "bt", "hat", "tree"};
        String chars = "atach";
        System.out.println(countCharacters(words, chars));
    }

    private static int countCharacters(String[] words, String chars) {
        //记录长度
        int count = 0;
        HashMap<Character, Integer> map = new HashMap<>();
        //把chars字符放到map集合中
        for (int i = 0; i < chars.length(); i++) {
            char c = chars.charAt(i);
            //value记录每个单词重复的次数
            map.put(c, map.getOrDefault(c, 0) + 1);
        }
        for (String word : words) {
            //每一轮把单词放进map2中
            HashMap<Character, Integer> map2 = new HashMap<>();
            for (int i = 0; i < word.length(); ++i) {
                char c = word.charAt(i);
                map2.put(c, map2.getOrDefault(c, 0) + 1);
            }
            boolean flag = true;
            for (int i = 0; i < word.length(); i++) {
                char c = word.charAt(i);
                //若map中不存在此键，则其value默认为零
                if (map.getOrDefault(c, 0) < map2.getOrDefault(c, 0)) {
                    flag = false;
                    break;
                }
            }
            if (flag)
                count += word.length();
        }
        return count;
    }
}
